﻿#SingleInstance force
SetWorkingDir, %A_ScriptDir%
SetTitleMatchMode, 2

; 以管理员启动，但后面启动的程序都为管理员
;if not A_IsAdmin
;{
;    Run *RunAs "%A_ScriptFullPath%"
;    ExitApp
;}

; 基础路径
APP := "D:\App"
TRAY_ICON = %A_Scriptdir%\MyHotKey.ico

; 文件路径
TC_PATH := APP . "\TotalCMD64\Totalcmd64.exe"
SIMPLE_EDITOR := APP . "\Everedit\EverEdit.exe"
; DEFAULT_EDITOR := "D:\Program Files\Microsoft VS Code\Code.exe"
DEFAULT_EDITOR := "D:\App\Editor\Sublime Text\sublime_text.exe"
EVERYTHING_PATH := "C:\Program Files\Everything\Everything.exe"
ALMRun_PATH := APP . "\ALMRun\ALMRun.exe"
; 不太常用的
ITPUB_PATH := "d:\Documents\Python\DownloadHelpers\itpub.py"
LINGOES_PATH := "D:\English\lingoes_portable_2.8.1_zh\Lingoes.exe"

;-------------------- 图标右键菜单 -------------------------
; Menu, Tray, NoStandard
Menu, Tray, Add,
Menu, Tray, Add, 编辑本脚本(&E), editThisScript
Menu, Tray, Add, 编辑开机启动脚本(&A), editStartupScript
Menu, Tray, Add, 编辑自动备份脚本(&T), editAutoBackupScript

;Menu, Tray, Add, 百度云客户端批量下载, RunBaiduYunBatchDownload
; Menu, Tray, Add, 自动备份, EveryDayScript_Run
;Menu, Tray, Add, 切换 Python 的版本, togglePythonVersion
Menu, Tray, Add,
Menu, Tray, Add,执行状态(&O),OpenListLines
Menu, Tray, Add,显示变量(&V),OpenListVars
; Menu, Tray, Add,
; Menu, Tray, Add,重载(&R),ScriptReload
; Menu, Tray, Add,退出(&X),Quit
Menu, Tray, icon, % TRAY_ICON

;-------------------- 自定义菜单 -------------------------
; Menu, MyMenu, Add, Lingoes迷你窗口(&S), openLingoesMini
; Menu, MyMenu, Add, Lingoes主界面(&A), openLingoes
; Menu, MyMenu, Add
; Menu, MyMenu, Add, youdao词典(&D), openYoudao
; Menu, MyMenu, Add, KeePass(&K),  openKeePass
;~ Menu, MyMenu, Add  ; 添加分隔线.
;~ Menu, MyMenu, Add, 打开1小时后休息听歌, openRestAHK
;~ Menu, MyMenu, Add, 休息, have_a_rest
;~ Menu, MyMenu, Add, 等等休息, wait_to_rest
Menu, MyMenu, Add  ; 添加分隔线.
Menu, MyMenu, Add, 重载当前脚本(&R), ScriptReload

;-------------------- 热字符串 -------------------------
::@mgmail::ywzhaiqi@gmail.com
::@mkindle::ywzhaiqi_21@kindle.cn
::@mgithub::https://github.com/ywzhaiqi

; 正则代表中文
::\z::[一-龥]

; 库地址
::@jquery::http://cdn.staticfile.org/jquery/3.2.1/jquery.min.js
::@zepto::https://cdn.staticfile.org/zepto/1.2.0/zepto.min.js
::underscore!::http://cdn.staticfile.org/underscore.js/1.7.0/underscore-min.js
::async.js!::http://cdnjs.cloudflare.com/ajax/libs/async/1.0.0/async.min.js

#IfWinActive, ahk_class TTOTAL_CMD
	::kh::(){left}
	::zy::(中亚)
	::zz::(自制)
	::smb::(扫描版)
#IfWinActive

#IfWinActive, ahk_class EVERYTHING
	::zz::(自制)
	; 切换 筛选器
	F6::Ev_ComboLoop()
#IfWinActive

;-------------------- 自定义按键  -------------------------
!A:: Menu, MyMenu, Show  ; 显示我自定义的快捷菜单
#c:: Run, cmd, %A_MyDocuments%
#n:: Run, %SIMPLE_EDITOR%

;-------------------- 图标右键菜单命令 -------------------------
editThisScript() {
    edit(A_ScriptDir)
}

editStartupScript() {
    edit(A_ScriptDir . "\开机启动.ahk")
}

editAutoBackupScript() {
    edit(A_ScriptDir . "\自动备份.ahk")
}

RunBaiduYunBatchDownload:
	Run 百度云客户端批量下载\百度云客户端批量下载.ahk
return

togglePythonVersion:
	;togglePythonVersion
return

OpenListLines:
	Listlines
return

OpenListVars:
	ListVars 
return

Quit:
	ExitApp
Return

ScriptReload:
	Reload
return

Suspend:
	Suspend
Return

; 双击启动 ALMRun
; ~LControl::
; 	if (A_PriorHotkey <> "~LControl" or A_TimeSincePriorHotkey > 200)
; 	{
; 		;两次按下时间间隔太长, 所以这不是一个两次按下.
; 		KeyWait, LControl
; 		return
; 	}
; 	;不存在则启动程序
; 	PID := RunApp(ALMRun_PATH)
; 	if PID != 0  ; 已经存在则发送按键
; 		Send, !{r}
; return

; 用 Everything 搜索。#f 快捷键在QQ聊天窗口无法得到内容。
#f::
	searchApp := EVERYTHING_PATH
	
	search := Select()
	if(search!=""){
		;If (RegExMatch(Clipboard,"^.:\\")){
		;	FileGetAttrib, Attributes, %Clipboard%
		;	IfInString, Attributes, D  ; 文件夹
		;		search = "%Clipboard%" 
		;	else
		;	{
		;		SplitPath, Clipboard, , , , nameNoExt  ; 去除路径，只取文件名
		;		search := nameNoExt
		;	}
		;} else
		;	search := Clipboard

		StringReplace, search, search, (电子书), , All
		Run, %searchApp% -s "%search%"
		WinActivate, ahk_class EVERYTHING
	} else {
		Run, %searchApp%
	}
return

;; 用 Listray 搜索
;#f::
;	clipSaved := ClipboardAll  ;先把剪贴板内容放在临时文件
;	Clipboard =
;	Send, ^c
;	ClipWait,0.3
;	If ErrorLevel
;		search :=
;	else
;		search := Clipboard

;	; 打开 Listray 搜索界面
;	Send, #s
;	WinWait, ahk_class Listary_WidgetWin_0
;	ControlSetText, ListarySearchBox1, > %search%
;	Send, {End}

;	;还原剪贴板的内容
;	Clipboard := clipSaved
;	clipSaved =  ; 在原来的剪贴板含大量内容时释放内存.
;return

;#IfWinActive ahk_class Chrome_WidgetWin_1
;	; 用外部编辑器编辑
;	^i::
;	    tmpfile = %A_ScriptDir%\ahk_text_edit_in_vim.txt
;		gvim = gvim.exe
	    
;	    WinGetTitle, active_title, A

;	    ;判断文件类型
;		filetype = txt
;		IfInString, active_title, SQL 查询分析器
;			filetype=sql
;		IfInString, active_title, Karma Blocker - Configuration
;			filetype = ini
;		; Tampermonkey
;		IfInString, active_title, chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo
;			filetype = js

;	    clipboard =
;	    Send ^a
;	    Send ^c
;	    clipwait

;		FileDelete, %tmpfile%.*
;		tmpfile=%tmpfile%.%filetype%
;	    FileAppend, %clipboard%, %tmpfile%
	    
;	    RunWait, %gvim% "%tmpfile%" +
;	    ;RunWait, %DEFAULT_EDITOR% "%tmpfile%"
;	    Fileread, text, %tmpfile%
;	    ; 还原读取的数据到剪贴板
;	    clipboard:=text

;	    ; 等待刚才获取文字的窗口激活
;	    WinWaitActive %active_title%

;		; 发送 Ctrl + V 粘贴
;	    send ^v
;	return
;#IfWinActive

; myCandy
;~ +Capslock:: Capslock
;~ Capslock:: Run, %A_ScriptDir%\Candy\myCandy.ahk  /ini=my.ini

;~ Capslock::
	;~ clipSaved := ClipboardAll  ;先把剪贴板内容放在临时文件
	;~ Clipboard =
	;~ Send, ^c
	;~ ClipWait,0.5
	;~ If not ErrorLevel
		;~ Run, d:\Program Files\Totalcmd\Tools\F4Menu_0.59\F4Menu.exe %Clipboard%
	;~ Clipboard := clipSaved  ;还原剪贴板的内容
	;~ clipSaved =  ; 在原来的剪贴板含大量内容时释放内存.
;~ return

; 用TC替换资源管理器或激活TC
~#t::
	; win8、win10 资源管理器
	IfWinActive, ahk_class CabinetWClass
	{
		;ControlGetText, FilePath, ToolbarWindow322  ; 这是win7，下面的是win8、win10的
		ControlGetText, FilePath, ToolbarWindow323
		StringReplace, FilePath, FilePath, 地址:%A_space%, , All
		WinClose
		Run, %TC_PATH% /o /t l="%FilePath%"
	}
	else IfWinActive, ahk_class TTOTAL_CMD
	{
	    path := clipboard
	    IfExist, %path%
	        Run, %TC_PATH% /o /t l="%path%"
	}
	else
	{
		WinActivate, ahk_class TTOTAL_CMD
	}
return

; 显示隐藏 GoAgent
#g::
	if isWinHidden = true
	{
		WinShow, GoAgent v3
		;WinActivate, GoAgent v3
		WinShow, aria2 rpc 下载
		WinActivate, GoAgent v3

		;WinShow D:\App\MyCmd\aria2\aria2c.exe
		;WinShow C:\Program Files\Calibre2\calibre-server.exe
		;WinShow C:\Windows\system32\cmd.exe - myBottle.py
		isWinHidden = false
	} 
	else
	{
		Winhide GoAgent v3.
		Winhide aria2 rpc 下载
		;Winhide dnsforwarder
		;Winhide D:\App\MyCmd\aria2\aria2c.exe
		;Winhide C:\Program Files\Calibre2\calibre-server.exe
		;Winhide C:\Windows\system32\cmd.exe - myBottle.py
		isWinHidden = true
	}
return

;mlo 新建任务
;~ #n::
	;~ Send,^+{M}
;~ return
;#n::
;	Send,^+!{n}  ;打开Rainlendar的新建任务
;	WinWait,ahk_class wxWindowClassNR
;	ControlSetText, Edit4,%A_Hour%:%A_Min%, ahk_class wxWindowClassNR
;return
/* #n::
	WinActivate,ahk_class MozillaWindowClass
	WinWait,ahk_class MozillaWindowClass
	Send, \bd
	;Sleep,300
	;Send,n
return
*/
;minipad2快捷键
/*
#n::
	IfWinNotActive,ahk_class d:\BestSoft\minipad2\minipad2\minipad2.exe
	{
		WinShow,ahk_class d:\BestSoft\minipad2\minipad2\minipad2.exe
		WinActivate,ahk_class d:\BestSoft\minipad2\minipad2\minipad2.exe
	}
	else
		WinHide
return
*/

;获取当前窗口标题
^F2::
	WinGetActiveTitle,title
	StringReplace, title, title,  - 360极速浏览器, , All
	clipboard =%title%
return

F1::
    WinGetActiveTitle,title
	if (InStr(title, ".ahk")) {
		run, % getAhkHelpPath()
	} else if (InStr(title, ".py")) {
		run, % getPythonHelpPath()
	}
return


#IfWinActive, ahk_class 三国志姜维传
Space::
	click
return

;#IfWinActive, ahk_exe Wiz.exe


;------------------------------- 不同情况下的下载命令 ------------------------------------------------
;#IfWinActive, it168旗下专业技术社区 - Vimperator  ; itpub 电子书一键下载
;^d::
;	BASE_URL := "http://www.itpub.net"
;	IfInString, Clipboard, %BASE_URL%
;	{
		
;		Run, python3 %ITPUB_PATH% "%Clipboard%"
;		Clipboard =
;	}
;	else
;		MsgBox, 请复制要下载的链接
;return

/*
有问题，如果路径有引号就打不开了
*/
; ------------------------------- ALTRun Ctrl+D 用TC打开路径 -----------------------------------
;#IfWinActive, ahk_class TALTRunForm  
;^d::
;	WinGetText, text
;	Loop, Parse, text, `n, `r
;	{
;		IfInString, A_LoopField, 命令=
;		{
;			StringReplace, fullPath, A_LoopField, 命令=
;			SplitPath, fullPath, , dirPath
;			Run, %TC_PATH% /O /T "/R=%dirPath%"
;		}
;	}
;return


; ------------------------------- 小说下载阅读器 ------------------------------------------------
/*
#IfWinActive, ahk_class ThunderRT6FormDC
	Right::
		Send,{Right}
		Sleep,200
		if_final_chapter()
	return

	Space::
		Send,{Space}
		Sleep,200
		if_final_chapter()
	return

	;判断是否是最后一章
	if_final_chapter()
	{
		IfWinNotActive, 云帆小说阅读器, 当前章是最后一章
			return

		Send, {Enter}
		
		find_new()
		Send,^j
		;~ ;如果小说下载阅读器开了最后一章自动查找
		;~ Sleep,700
		;~ IfWinNotActive,选择章节网址
		;~ {
			
		;~ }
	}

	;找到下一本有更新的小说
	find_new()
	{
		;查找正在阅读的小说的位置
		ImageSearch,x1,y1,0,0,A_ScreenWidth,A_ScreenHeight,%A_ScriptDir%\xiaoshuo_reading.png
		;查找正在阅读下面的未读的小说
		ImageSearch,FoundX,FoundY,0,y1,A_ScreenWidth,A_ScreenHeight,%A_ScriptDir%\xiaoshuo.png
		if ErrorLevel = 2
			MsgBox Could not conduct the search.
		else if ErrorLevel = 1
		{
			ControlFocus, TreeView20WndClass1, ahk_class ThunderRT6FormDC
			Send,{down}
		}
		else{
			Click,%FoundX%, %FoundY%
		}
		Click,481, 258
		;ControlClick,Internet Explorer_Server3,ahk_class ThunderRT6FormDC
	}
#IfWinActive
*/

#IfWinActive, Base64 编码 解码器 V1.4
	;~ 鼠标中键在输入框全选
	MButton::
		MouseGetPos, , , , control
		IfInString, control, Edit
		{
			MouseClick, right
			Sleep, 10
			Send, a
		}
	return
#IfWinActive

; 更改 python 的版本
changePythonVersion(isPy2)
{
	if isPy2
		pyPath := "d:\App\Python27;"
	else
		pyPath := "d:\App\Python33;d:\App\Python33\Scripts;"
	
	RegRead, Path, HKEY_LOCAL_MACHINE, SYSTEM\CurrentControlSet\Control\Session Manager\Environment, Path
	re := "i);?[a-z]:\\[^;]*Python[^;]+"
	Path := RegExReplace(Path, re, "",,, 1) . pyPath
	
	RunWait, %comspec% /c wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%Path%", , Hide UseErrorLevel
	
	; EnvUpdate
	
	if isPy2
		MsgBox 已经切换到 Python 2.7
	else
		MsgBox 已经切换到 Python 3.3
}


;PrintScreen::reload

Select()  ; 获取数据,并根据数据内容返回相应的格式
{
	MaxTimeWait := 4
	ClipSaved := ClipboardAll 
	Clipboard =
	Sendinput ^c
	While(!Clipboard)
	{
		ClipWait,0.1,1
		If A_Index > %MaxTimeWait%
			Break
	}
	select = %Clipboard% ; 强制转换为纯文本
	Clipboard := ClipSaved 
	ClipSaved =
	return select
}

Ev_ComboLoop()
{
    SendMessage, 0x147, 0, 0, ComboBox1, A
    ChoicePos = %ErrorLevel%
    ChoicePos += 2
    If (ChoicePos = 9)
        ChoicePos = 1
    Control, Choose, %ChoicePos%, ComboBox1, A
    Return
}

#Include <edit>
#Include <ahkHelper>
#Include <pythonHelper>
; #Include MyFunc.ahk  ; 我的一些常用函数